# -*- encoding: utf-8 -*-
"""

PyCharm MyType创建类
2024年10月21日20时49分
by wenyang

文件主要内容:
使用自定的方式来创建类

"""
class MyType(type):
    # 初始化类的时候就是可以进行一些操作
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

    def __new__(cls, *args, **kwargs):
        # 创建类 可以进行一些操作
        new_cls = super().__new__(cls, *args, **kwargs)
        return new_cls
    def __call__(self, *args, **kwargs):
        # 首先调用自己的__new__方法创建对象
        # 然后会调用自己的__init__方法初始化对象
        empty_object = self.__new__(self)
        self.__init__(empty_object, *args, **kwargs)
        return empty_object
# 假设Foo是一个对象 是由MyType创建的
# 就是相当于Foo是MyType的一个实例 所以首先会通用__new__方法和__init__方法来创建对象 之后通过使用Foo()来调用__call__方法来对实例对象来进行操作
class Foo(object, metaclass = MyType):
    def __init__(self, name):
        self.name = name

v1 = Foo("hello world")  # 会调用MyType的__call__方法

def main():
    print(v1)
    print(v1.name)


if __name__ == "__main__":
    main()
